In many modern systems, various operations and/or algorithms are executed by one or more instances of one or more software components. Typically, a software component implements or provides a certain functionality, which may be used in the overall computations performed by the system. Different components may provide different beneficial functionalities. Depending on the computation needs, one or more instances, i.e., copies, of one or more software components may be used for the overall computations/processing. Some of these component instances can operate on respective data independently of each other, and some component instances may exchange data, partial results, etc., with one another, and may thus depend on each other. As such, some component instances may execute in parallel, i.e., concurrently, either entirely or at least in part, and some component instances may execute sequentially.
While in some systems all software component instances can be implemented using a single hardware processing module (also called a core), a typical system includes a number of cores to facilitate parallel execution of various component instances, which can improve the overall performance of the system. Each core may implement one or more instances of a single or several different software components (also called units). A scheduler can designate or map various units and/or unit instances to different cores, for example, according to certain design constraints, to improve overall utilization of the available cores, etc. The result of the mapping can be expressed as unit-core map, indicating which units and/or unit instances are designated to each core.
In a typical multi-core system, all instances of a unit that exchange data with other instances of the same unit or instances of different units use the same communication mechanism, regardless of whether the two communicating instances are mapped to the same core. One of the reasons for this is that a unit is generally specified without the knowledge of the unit-core map, and all instances of a particular unit are, in substance, copies of that unit. Therefore, the unit and, hence, the corresponding instances, include the only communication mechanism that can facilitate communication between two instances regardless of the mapping of those instances. This can lead to inefficient, slow communication in many situations.